﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CubaLibreBar.Model.Core.Entities;
using CubaLibreBar.Model.Dados;

namespace CubaLibreBar.Win.Controles
{
    public partial class Estoque : UserControl
    {
        public Estoque()
        {
            InitializeComponent();
        }


        private void Estoque_Load(object sender, EventArgs e)
        {
            List<Produtos> produtos = ProdutosDAO.GetAllProdutos();
            if (produtos.Count > 0)
            {
                cbProdutos.DataSource = produtos;
                AutoCompleteStringCollection nomesDosProdutos = new AutoCompleteStringCollection();
                foreach (Produtos p in produtos)
                {
                    nomesDosProdutos.Add(p.NomeProduto);
                }

                cbProdutos.AutoCompleteCustomSource = nomesDosProdutos;
                cbProdutos.ValueMember = "NomeProduto";

                AtualizaLabelQuantidade();
            }
            else
            {
                btnSalvar.Enabled = false;

                lbMensagem.Text = "Nenhum produto cadastrado!";
                lbMensagem.ForeColor = Color.Red;
                lbMensagem.Visible = true;
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            Produtos produto = (Produtos)cbProdutos.SelectedItem;
            int quantidade;

            if (cbProdutos.SelectedValue != null)
            {
                if (!String.IsNullOrEmpty(txtQuantidade.Text))
                {
                    if (Int32.TryParse(txtQuantidade.Text, out quantidade) && quantidade >= 0)
                    {
                        produto.QuantidadeProduto += quantidade;

                        ProdutosDAO.UpdateProduto(produto);

                        AtualizaLabelQuantidade();
                        txtQuantidade.Text = string.Empty;

                        MessageBox.Show(this, "Estoque do produto " + produto.NomeProduto + " foi atualizado com sucesso.", "CubaLibreBar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        epQuantidade.SetError(txtQuantidade, "O campo Quantidade deve ser preenchido apenas com números.");
                    }
                }
                else
                {
                    epQuantidade.SetError(txtQuantidade, "O campo Quantidade é obrigatório.");
                }
            }
            else
            {
                epProduto.SetError(cbProdutos, "O campo Produto é obrigatório.");
            }

            MessageBox.Show(this, "Verifique os campos sinalizados com erro e insira valores válidos.", "CubaLibreBar", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void cbProdutos_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizaLabelQuantidade();
        }

        private void btnLimpar_Click(object sender, EventArgs e)
        {
            txtQuantidade.Text = string.Empty;
        }

        private void AtualizaLabelQuantidade()
        {
            Produtos produto = (Produtos)cbProdutos.SelectedItem;
            lbQuantidade.Text = produto.QuantidadeProduto.ToString();
            lbQuantidade.Visible = true;
        }

        private void txtQuantidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

    }
}
